package com.ehome.poct.core.dao.mybatis;

import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ehome.mybatisplus.support.AbstractCrudRepository;
import com.ehome.poct.core.api.dto.report.TestConfClinicalReportStandardDTO;
import com.ehome.poct.core.dao.entity.report.TestConfClinicalReportStandardDO;
import com.ehome.poct.core.dao.mybatis.mapper.report.TestConfClinicalReportStandardMapper;
import com.ehome.poct.core.repository.report.TestConfClinicalReportStandardRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import java.math.BigDecimal;

/**
 * 报告的临床编码RepositoryImpl
 *
 * @author muqiu
 * @Date 2022-10-18 11:20
 */
@Repository
public class TestConfClinicalReportStandardRepositoryImpl extends AbstractCrudRepository<TestConfClinicalReportStandardDO, TestConfClinicalReportStandardDTO> implements TestConfClinicalReportStandardRepository {
    @Autowired private TestConfClinicalReportStandardMapper testConfClinicalReportStandardMapper;
    @Override
    public TestConfClinicalReportStandardDTO getByResult(String reportCode, String result, Boolean isMultiData, Integer patientType) {
        if(isMultiData){
            String[] results= result.split("/");
            return BeanUtil.toBean(testConfClinicalReportStandardMapper.selectOne(Wrappers.<TestConfClinicalReportStandardDO>lambdaQuery()
                    .eq(TestConfClinicalReportStandardDO::getStripAResult,results[0])
                    .eq(TestConfClinicalReportStandardDO::getStripBResult,results[1])
                    .eq(TestConfClinicalReportStandardDO::getReportCode,reportCode)
                    .eq(TestConfClinicalReportStandardDO::getPatientType,patientType)
                    .last(" limit 1 ")),TestConfClinicalReportStandardDTO.class);
        }
        else
        {
            return  BeanUtil.toBean(testConfClinicalReportStandardMapper.selectOne(Wrappers.<TestConfClinicalReportStandardDO>lambdaQuery()
                    .eq(TestConfClinicalReportStandardDO::getStripAResult,result)
                    .eq(TestConfClinicalReportStandardDO::getReportCode,reportCode)
                    .eq(TestConfClinicalReportStandardDO::getPatientType,patientType)
                    .last(" limit 1 ")),TestConfClinicalReportStandardDTO.class);
        }
    }
    @Override
    public  TestConfClinicalReportStandardDTO getByRange(String reportCode, Long typeCodeA, BigDecimal value1, Long typeCodeB, BigDecimal value2, Boolean isMultiData, Integer patientType) {
        if (isMultiData) {
            return BeanUtil.toBean(testConfClinicalReportStandardMapper.selectOne(Wrappers.<TestConfClinicalReportStandardDO>lambdaQuery()
                    .eq(TestConfClinicalReportStandardDO::getStripTypeA, typeCodeA)
                    .lt(TestConfClinicalReportStandardDO::getStripAMin, value1)
                    .ge(TestConfClinicalReportStandardDO::getStripAMax, value1)
                    .eq(TestConfClinicalReportStandardDO::getStripTypeB, typeCodeB)
                    .lt(TestConfClinicalReportStandardDO::getStripBMin, value2)
                    .ge(TestConfClinicalReportStandardDO::getStripBMax, value2)
                    .eq(TestConfClinicalReportStandardDO::getPatientType,patientType)
                    .last(" limit 1")
            ),TestConfClinicalReportStandardDTO.class);
        } else {
            return BeanUtil.toBean(testConfClinicalReportStandardMapper.selectOne(Wrappers.<TestConfClinicalReportStandardDO>lambdaQuery()
                    .eq(TestConfClinicalReportStandardDO::getReportCode,reportCode)
                    .eq(TestConfClinicalReportStandardDO::getPatientType,patientType)
                    .lt(TestConfClinicalReportStandardDO::getStripAMin, value1)
                    .ge(TestConfClinicalReportStandardDO::getStripAMax, value1)
                    .last(" limit 1")
            ),TestConfClinicalReportStandardDTO.class);
        }
    }

}
